iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 19
0
自我挑戰組

向Android APP開發說Hello系列 第 19

Day 19. App的事件監聽 - Event Listener (part.1)

  • 分享至 

  • xImage
  •  

目前為止,我們設定OnClick動作都是直接放在XML檔案(Layout布局)中,作為特定View的屬性,例如:

<TextView
     android:id="@+id/numbers"
     style="@style/CategoryStyle"
     android:background="@color/category_numbers"
     android:text="@string/category_numbers"
     android:onClick="openNumberList()"/>

有點像是HTML中的:

<button onclick="myFunction()">Click me</button>

現在我們要更進一步,將Event Listener寫在java中(有點像是呼叫的方法本來寫在HTML中,現在寫在JavaScript裡)。

Event Listener

事件(Event)有很多種,像是click event, long click event, drag event, keyboardkey event等)。在前端使用者的行為會被硬體偵測到,使用者點擊的位置是屬於哪個View時,Android會呼叫該事件所對應的方法。

EventLinster是interface(介面),都有一個callback method。

callback:在事件發生時,回呼該方法

例如View.OnClickListener這個事件監聽器,只有一個abstract method:
void onClick (View v)

interface vs. abstract class vs. class

舉例來說:

  • TextView是個class(包含state,實作所有method)
public class TextView {
    String mText;
    int mTextColor
    
    void setText (String text) {
        mText = text;
    }
    
    
    void setTextColor (int color) {
        mTextColor = color;
    }
    ...
}
  • ViewGroup是個abstract class(包含state,實作部分method)
public abstract vlass ViewGroup
    int mChildrenCount;
    
    void addView (view child)
        addView (child, -1);
        
    void onLayout();
    ...
  • EventLinster是interface(不含state,只有一個abstract method)
public interface OnClickLinstener
    void onClick (View view);

因此當我們:

  • 建立TextView時,可以直接使用該類別
  • 建立ViewGroup時,需使用子類別(例如LinearLayout),並實作抽象方法。
  • 設置事件監聽時,必須實作所有absolute method的內容。

References


上一篇
Day 18. 多個Activity連結
下一篇
Day 20. App的事件監聽 - Event Listener (part.2)
系列文
向Android APP開發說Hello30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言